package sicnu.cs.ich.activity.service;


import com.github.pagehelper.PageInfo;
import org.springframework.scheduling.annotation.Scheduled;
import sicnu.cs.ich.activity.mapper.ActivityMapper;
import sicnu.cs.ich.api.common.ResultInfo;
import sicnu.cs.ich.api.domain.dto.ActivityDTO;
import sicnu.cs.ich.api.domain.dto.CallDTO;
import sicnu.cs.ich.api.domain.entity.ActivityImg;
import sicnu.cs.ich.api.domain.form.ActivityForm;
import sicnu.cs.ich.api.domain.form.AddCallForm;
import sicnu.cs.ich.api.domain.form.PageParam;
import sicnu.cs.ich.api.domain.vo.ActivityDetailVO;

import java.util.ArrayList;
import java.util.Map;


/**
 * @author 黎琦
 * @date 2021-11-27 20:39
 */
public interface IActivityService {

    /**
     * 分页获取所有活动
     *
     * @param param
     * @return
     */
    public PageInfo<ActivityDTO> getAllActivity(PageParam param);

    /**
     * 分页获取所有号召
     *
     * @param param
     * @return
     */
    public PageInfo<CallDTO> getAllCall(PageParam param);

    /**
     * 添加号召/活动
     *
     * @param addCallForm
     * @param uid
     * @param isCallUpon 是否是号召 1:号召 0:活动
     * @param images
     * @return 添加的活动id
     */

    public Integer insert(AddCallForm addCallForm, Integer uid, Integer isCallUpon, ArrayList<ActivityImg> images);


    /**
     * 参加号召/活动
     *  @param activityId
     * @param uid
     */
    ResultInfo<Void> participate(Integer activityId, Integer uid);


    /**
     * 根据aid获取活动详情
     * @param aid
     * @return
     */
    ActivityDetailVO getActivityDetail(Integer aid);

    /**
     * 将号召转为活动（检测是否满足条件，即人数是否达标、号召是否过期）
     * @param aid
     */
    public void callToActivity(Integer aid);

    /**
     * 停止活动的报名
     * @param aid
     */
    public void stopApply(Integer aid);

    /**
     * 每天0点、6点、12点、18点检测活动是否结束
     */
    @Scheduled(cron = "0 0 0,6,12,18 * *")
    public void scheduledOfActivityStop();

    /**
     * 每天0点、6点、12点、18点检测号召是否结束
     */
    @Scheduled(cron = "0 0 0,6,12,18 * *")
    public void scheduledOfCallStop();

    /**
     * 每天0点、6点、12点、18点检测号召是否成功
     */
    @Scheduled(cron = "0 0 0,6,12,18 * *")
    public void scheduledOfCallOk();

    /**
     * 号召转为活动（更新信息）
     * @param activityForm
     * @param images
     */
    public void updateInfo(ActivityForm activityForm,ArrayList<ActivityImg> images);

    /**
     * 获取所有活动/号召对应人数，使用map存，key:活动id，value:活动/号召参与人数
     * @return
     */
    Map<Integer,Long> allActivityParticipantNum();
}
